\", sIDToReplace);\r\n\r\n\t\tfunction writeElements(sElements, sIDToReplace) {\r\n\t\t\tif (sIDToReplace) {\r\n\t\t\t\t$('#' + sIDToReplace).replaceWith(sElements);\r\n\t\t\t} else {\r\n\t\t\t\t// This breaks when validators are AJAX loaded into a completed\r\n\t\t\t\t// page because it re-opens the document which clears the entire\r\n\t\t\t\t// page. It is left for backwards compatability for versions of\r\n\t\t\t\t// QB that do not provide an element to replace.\r\n\t\t\t\tdocument.write(sElements);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction addField(name, type, required, message, sIDToReplace) {\r\n\t\t\tself.fields[self.numItems] = new validatorField(name, self.numItems, type, form, required, id);\r\n\t\t\tvar sElements = \"\" +\r\n\t\t\t \"
\" + message + \"
\"\r\n\r\n\t\t\twriteElements(sElements, sIDToReplace)\r\n\t\t\tself.numItems++;\r\n\t\t}\r\n\r\n\t\tfunction addCondition(child, parent, parentType, condition) {\r\n\t\t\tif (!self.conditions[child]) {\r\n\t\t\t\tself.conditions[child] = new Array();\r\n\t\t\t}\r\n\t\t\tself.conditions[child][self.conditions[child].length] = new validatorCondition(form, parent, parentType, condition);\r\n\t\t}\r\n\r\n\t\tfunction check() {\r\n\t\t\tvar tdiv = document.getElementById('validator' + id);\r\n\t\t\ttdiv.style.display = 'none';\r\n\r\n\t\t\tvar returnVal = true;\r\n\t\t\tvar bCheck;\r\n\r\n\t\t\tvar jumpTo = '';\r\n\t\t\tvar bJumpToQuestion = false;\r\n\r\n\t\t\tfor (var i = 0; i < self.numItems; i++) {\r\n\t\t\t\tbCheck = true;\r\n\t\t\t\tif (self.conditions[self.fields[i].name] != undefined) {\r\n\t\t\t\t\tfor (var j = 0; j < self.conditions[self.fields[i].name].length; j++) {\r\n\t\t\t\t\t\tif (!self.conditions[self.fields[i].name][j].test()) {\r\n\t\t\t\t\t\t\tbCheck = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (bCheck) {\r\n\t\t\t\t\tif (!self.fields[i].validateField()) {\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t\tif (jumpTo == '') {\r\n\t\t\t\t\t\t\tjumpTo = 'anchor' + id + i;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tself.fields[i].clearValidation();\r\n\t\t\t\t}\r\n\t\t\t\tif (jumpOnError) {\r\n\t\t\t\t\tif (jumpToTop) {\r\n\t\t\t\t\t\tscroll(0,0);\r\n\t\t\t\t\t} else if (jumpTo != '') {\r\n\t\t\t\t\t\t//location.href = '#' + jumpTo;\r\n\t\t\t\t\t\tbJumpToQuestion = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(bJumpToQuestion){\r\n\t\t\t\t$('body').animate({ scrollTop: $('.mgrfront-error:visible:gt(0)').offset().top - 200}, 200);\r\n\t\t\t}\r\n\r\n\t\t\tif ((disableForm==true)&&(returnVal==true)){\r\n\t\t\t\ttry{\r\n\t\t\t\t\tdocument.getElementById(form + '_submit').disabled = true;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (err){\r\n\t\t\t\t\t//alert(err.message);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\ttry{\r\n\t\t\t\t\tdocument.getElementById(form + '_clear').disabled = true;\r\n\t\t\t\t}\r\n\t\t\t\tcatch (err){\r\n\t\t\t\t\t//alert(err.message);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (disableWithLightbox==true){\r\n\t\t\t\t\tDisableLB();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn returnVal;\r\n\t\t}\r\n\r\n\t\tfunction clear() {\r\n\t\t\tvar tdiv = document.getElementById('validator' + id);\r\n\t\t\ttdiv.style.display = 'none';\r\n\t\t\tfor (var i = 0; i < self.numItems; i++) {\r\n\t\t\t\tself.fields[i].clearValidation();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction validatorCondition(form, name, type, condition) {\r\n\t\tthis.form = form;\r\n\t\tthis.name = name;\r\n\t\tthis.type = type;\r\n\t\tthis.condition = condition;\r\n\r\n\t\tthis.test = test;\r\n\r\n\t\tvar conditioner = '';\r\n\r\n\t\tfunction test() {\r\n\t\t\ttry{\r\n\t\t\t\tvar value;\r\n\r\n\t\t\t\tif (type == 'radio' || type == 'checkbox') {\r\n\t\t\t\t\tvalue = getCheckedValue(name);\r\n\t\t\t\t\tconditioner = condition;\r\n\t\t\t\t} else if (type == 'matchfield'){\r\n\t\t\t\t\tvalue = document.forms[form].elements[name].value;\r\n\t\t\t\t\tconditioner = document.forms[form].elements[condition].value;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalue = document.forms[form].elements[name].value;\r\n\t\t\t\t\tconditioner = condition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (isRegExp(conditioner)) {\r\n\t\t\t\t\tif (conditioner.test(value)){\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (isString(conditioner)) {\r\n\t\t\t\t\tif (value==conditioner){\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (isArray(conditioner)) {\r\n\t\t\t\t\tfor (var i = 0; i < conditioner.length; i++) {\r\n\t\t\t\t\t\tif (isRegExp(conditioner[i])) {\r\n\t\t\t\t\t\t\tif (conditioner[i].test(value)){\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if (isString(conditioner[i])) {\r\n\t\t\t\t\t\t\tif (value == conditioner[i]){\r\n\t\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tcatch (err){\r\n\t\t\t\t//alert(err.message);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction validatorField(name, num, type, form, required, id) {\r\n\t\tthis.name = name;\r\n\t\tthis.num = num;\r\n\t\tthis.type = type;\r\n\t\tthis.form = form\r\n\t\tthis.required = required;\r\n\t\tthis.id = id;\r\n\r\n\t\tthis.validateField = validateField;\r\n\t\tthis.clearValidation = clearValidation;\r\n\r\n\r\n\r\n\t\tfunction validateField() {\r\n\t\t\tvar regexpTypes = new Array();\r\n\t\t\tregexpTypes['regex']\t\t= new RegExp(/^regex~/i);\r\n\t\t\tregexpTypes['regexnot']\t\t= new RegExp(/^regexnot~/i);\r\n\t\t\tregexpTypes['matchfield']\t= new RegExp(/^matchfield~/i);\r\n\t\t\tregexpTypes['matchfieldnot']= new RegExp(/^matchfieldnot~/i);\r\n\t\t\tregexpTypes['matchvalue']\t= new RegExp(/^matchvalue~/i);\r\n\t\t\tregexpTypes['matchvaluenot']= new RegExp(/^matchvaluenot~/i);\r\n\t\t\tregexpTypes['matchleft']\t= new RegExp(/^matchleft~/i);\r\n\t\t\tregexpTypes['matchleftnot']\t= new RegExp(/^matchleftnot~/i);\r\n\t\t\tregexpTypes['matchright']\t= new RegExp(/^matchright~/i);\r\n\t\t\tregexpTypes['matchrightnot']= new RegExp(/matchrightnot~/i);\r\n\t\t\tregexpTypes['matchlen']\t\t= new RegExp(/matchlen~/i);\r\n\t\t\tregexpTypes['matchlennot']\t= new RegExp(/matchlennot~/i);\r\n\t\t\tregexpTypes['radio']\t\t= new RegExp(/^radio$/i);\r\n\t\t\tregexpTypes['checkbox']\t\t= new RegExp(/^checkbox$/i);\r\n\r\n\t\t\tvar regExpressions = new Array();\r\n\t\t\tregExpressions['phone']\t\t= new RegExp(/^[1-9]\\d{2}\\-\\d{3}\\-\\d{4}$/);\r\n\t\t\tregExpressions['zip']\t\t= new RegExp(/(^\\d{5}$)|(^\\d{5}-\\d{4}$)|(^[a-zA-Z]\\d[a-zA-Z][- ]?\\d[a-zA-Z]\\d$)/);\r\n\t\t\tregExpressions['integer']\t= new RegExp(/^-?\\d+$/);\r\n\t\t\tregExpressions['decimal']\t= new RegExp(/^-?\\d*.?\\d*$/);\r\n\t\t\tregExpressions['currency']\t= new RegExp(/^-?\\d*(.\\d{0,6})?$/);\r\n\t\t\tregExpressions['date']\t\t= new RegExp(/^(0[1-9]|1[012]|[1-9])[-/](0[1-9]|[12][0-9]|3[01]|[1-9])[-/](19|20)\\d{2}$/);\r\n\t\t\tregExpressions['datetime']\t= new RegExp(/^(0[1-9]|1[012]|[1-9])[-/](0[1-9]|[12][0-9]|3[01]|[1-9])[-/](19|20)?[0-9][0-9]( )([0-2])?[1-9]:([0-5][0-9])(:[0-5][0-9])?( (AM|PM))?$/);\r\n\t\t\tregExpressions['email']\t\t= new RegExp(GLOBAL_JS_EMAIL_REGEX);\r\n\t\t\tregExpressions['social']\t= new RegExp(/^\\d{3}-\\d{2}-\\d{4}$/);\r\n\t\t\tregExpressions['url']\t\t= new RegExp(/^http(s)?:\\/\\/.*/);\r\n\t\t\tregExpressions['ip']\t\t= new RegExp(/\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b/);\r\n\r\n\t\t\tvar vdiv = document.getElementById('validate' + id + name + num);\r\n\t\t\tvar tdiv = document.getElementById('validator' + id);\r\n\t\t\tvar field = document.getElementById(name);\r\n\r\n\t\t\t// There is no HTML element with ID == `name` if it is a Checkbox_Question or Radio_Question. The IDs are `name_0`, `name_1`, etc.\r\n\t\t\t// Plus, it seems that the disabled check below expects an array of elements. So, get the array in this scenario.\r\n\t\t\t// - tschwab, May 2020\r\n\t\t\tvar isCheckOrRadio = (regexpTypes['radio'].test(type) || regexpTypes['checkbox'].test(type));\r\n\t\t\tif (isCheckOrRadio) {\r\n\t\t\t\tfield = document.getElementsByName(name);\r\n\t\t\t}\r\n\r\n\t\t\tif (field === null || (isCheckOrRadio && (field.length == 0))) {\r\n\t\t\t\treturnVal = false;\r\n\t\t\t\tvdiv.innerHTML = 'Failed to validate this field. This can occur if validation is added to a Question_Label.'\r\n\t\t\t} else if(!$(field).is(\":visible\")) {\r\n\t\t\t\t//Do not validate an element that cannot be seen\r\n\t\t\t\treturnVal = true;\r\n\t\t\t} else {\r\n\r\n\t\t\t\tvar value;\r\n\t\t\t\tif (isCheckOrRadio) {\r\n\t\t\t\t\tvalue = getCheckedValue(name);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalue = field.value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (value == undefined) {\r\n\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar trimmedValue = trim(value);\r\n\r\n\t\t\t\tvar returnVal = true;\r\n\r\n\t\t\t\tvdiv.style.display = 'none';\r\n\r\n\t\t\t\t//jsmotherman 3.6.2017 v64 - This code was in v50 but removed in v51, not sure why. This makes validation succeed on disabled inputs.\r\n\t\t\t\t//Typically, validation conditions are used for this in managerfront. However, for configurator, you cannot currently add conditions.\r\n\t\t\t\t//Instead, this display activator Test() will disable inputs if customForm == true, which is a global used in the product detail page for configurator.\r\n\t\t\t\t//I think it would probably be fine to remove the check for customForm - I believe it was added just in case that change would break things.\r\n\t\t\t\tif (isCheckOrRadio) {\r\n\t\t\t\t\tbIsDisabled = true;\r\n\t\t\t\t\tfor (i = 0; i < field.length; i++) {\r\n\t\t\t\t\t\tif (field[i].disabled == false) {\r\n\t\t\t\t\t\t\tbIsDisabled = false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (bIsDisabled) {\r\n\t\t\t\t\t\treturn returnVal;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (field.disabled == true) {\r\n\t\t\t\t\treturn returnVal;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif (isRegExp(type)) {\r\n\t\t\t\t\tif (trimmedValue != \"\") {\r\n\t\t\t\t\t\tvar oRegEx = new RegExp(type);\r\n\t\t\t\t\t\treturnVal = !oRegEx.test(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (trimmedValue == \"\" && required) {\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['regex'].test(type)) {\r\n\t\t\t\t\tvar matchReg = eval(trim(type.split('~').slice(1).join('~')));\r\n\t\t\t\t\tif (isRegExp(matchReg)) {\r\n\t\t\t\t\t\tvar oRegEx = new RegExp(matchReg);\r\n\t\t\t\t\t\treturnVal = !oRegEx.test(value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['regexnot'].test(type)) {\r\n\t\t\t\t\tvar matchReg = eval(trim(type.split('~').slice(1).join('~')));\r\n\t\t\t\t\tif (isRegExp(matchReg)) {\r\n\t\t\t\t\t\tvar oRegEx = new RegExp(matchReg);\r\n\t\t\t\t\t\treturnVal = oRegEx.test(value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchfield'].test(type)) {\r\n\t\t\t\t\tvar matchName = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (value != document.forms[form].elements[matchName].value)\r\n\t\t\t\t\t\treturnVal = false;\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchfieldnot'].test(type)) {\r\n\t\t\t\t\tvar matchName = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (value == document.forms[form].elements[matchName].value)\r\n\t\t\t\t\t\treturnVal = false;\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchvalue'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (value == matchVal)\r\n\t\t\t\t\t\treturnVal = false;\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchvaluenot'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (value != matchVal)\r\n\t\t\t\t\t\treturnVal = false;\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchleft'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (left(value, matchVal.length).toLowerCase() == matchVal.toLowerCase()){\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchleftnot'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (left(value, matchVal.length).toLowerCase() != matchVal.toLowerCase()){\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchright'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (right(value, matchVal.length).toLowerCase() == matchVal.toLowerCase()){\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchrightnot'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (right(value, matchVal.length).toLowerCase() != matchVal.toLowerCase()){\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchlen'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (value.length == parseInt(matchVal)){\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else if (trimmedValue != \"\" && regexpTypes['matchlennot'].test(type)) {\r\n\t\t\t\t\tvar matchVal = type.split('~').slice(1).join('~');\r\n\t\t\t\t\tif (value.length != parseInt(matchVal)){\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (trimmedValue != \"\" && regExpressions[type] != undefined) {\r\n\t\t\t\t\t\treturnVal = regExpressions[type].test(value);\r\n\t\t\t\t\t} else if (trimmedValue == \"\" && required) {\r\n\t\t\t\t\t\treturnVal = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!returnVal) {\r\n\t\t\t\tvdiv.style.display = 'block';\r\n\t\t\t\ttdiv.style.display = 'block';\r\n\t\t\t}\r\n\t\t\treturn returnVal;\r\n\t\t}\r\n\r\n\t\tfunction clearValidation() {\r\n\t\t\tvar vdiv = document.getElementById('validate' + id + name + num);\r\n\t\t\tvdiv.style.display = 'none';\r\n\t\t}\r\n\t}\r\n\r\n\t// Trim white space from beginning and end of string\r\n\tfunction trim(stringToTrim) {\r\n\t\treturn stringToTrim.replace(/^\\s+|\\s+$/g,\"\");\r\n\t}\r\n\r\n\tfunction isArray() {\r\n\t\treturn arguments[0] instanceof Array;\r\n\t}\r\n\r\n\tfunction isRegExp() {\r\n\t\treturn arguments[0] instanceof RegExp;\r\n\t}\r\n\r\n\tfunction isString() {\r\n\t\tif (typeof arguments[0] == 'string')\r\n\t\t\treturn true;\r\n\t\tif (typeof arguments[0] == 'object') {\r\n\t\t\tvar criterion = arguments[0].constructor.toString().match(/string/i);\r\n\t\t\treturn (criterion != null);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfunction getCheckedValue(radioName) {\r\n\t\tvar radioObj = document.getElementsByName(radioName);\r\n\t\tif (!radioObj) {\r\n\r\n\t\t\tvar radioObj = document.getElementById(radioName);\r\n\t\t\tif (!radioObj) {\r\n\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tvar radioLength = radioObj.length;\r\n\t\tif (radioLength == undefined){\r\n\t\t\tif(radioObj.checked){\r\n\t\t\t\treturn radioObj.value;\r\n\t\t\t} else {\r\n\t\t\t\treturn \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0; i < radioLength; i++) {\r\n\t\t\tif (radioObj[i].checked) {\r\n\t\t\t\treturn radioObj[i].value;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn \"\";\r\n\t}\r\n\t/************************************************************************************\r\n\t*** END VALIDATION FUNCTIONS ********************************************************\r\n\t************************************************************************************/\r\n\r\n\r\n\t/************************************************************************************\r\n\t*** START DISABLE LIGHTBOX FUNCTIONS ************************************************\r\n\t************************************************************************************/\r\n\tfunction DisableLB(){\r\n\t\tvar oLBG = document.getElementById('disableLBbg');\r\n\t\tvar oLPic = document.getElementById('disableLBwin');\r\n\r\n\t\tvar popwidth = 300;\r\n\r\n\t\tif (window.innerHeight && window.scrollMaxY) {\r\n\t\t\toLBG.style.width = document.body.scrollWidth;\r\n\t\t\toLBG.style.height = window.innerHeight + window.scrollMaxY;\r\n\t\t} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac\r\n\t\t\toLBG.style.width = document.body.scrollWidth;\r\n\t\t\toLBG.style.height = document.body.scrollHeight;\r\n\t\t} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari\r\n\t\t\toLBG.style.width = document.body.offsetWidth;\r\n\t\t\toLBG.style.height = document.body.offsetHeight;\r\n\t\t}\r\n\r\n\t\tif (self.innerHeight) {\t// all except Explorer\r\n\t\t\toLPic.style.left = (self.innerWidth / 2) - (popwidth / 2);\r\n\t\t\toLPic.style.top = self.pageYOffset + (self.innerHeight / 10);\r\n\t\t} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode\r\n\t\t\toLPic.style.left = (document.documentElement.clientWidth / 2) - (popwidth / 2);\r\n\t\t\toLPic.style.top = document.documentElement.scrollTop + (document.documentElement.clientHeight / 10);\r\n\t\t} else if (document.body) { // other Explorers\r\n\t\t\toLPic.style.left = (document.body.clientWidth / 2) - (popwidth / 2);\r\n\t\t\toLPic.style.top = document.body.scrollTop + (document.body.clientHeight / 10);\r\n\t\t}\r\n\r\n\t\toLBG.style.display = 'block';\r\n\t\toLPic.style.display = 'block';\r\n\r\n\t}\r\n\r\n\tfunction HideDisableLB(){\r\n\t\tdocument.getElementById('disableLBbg').style.display = 'none';\r\n\t\tdocument.getElementById('disableLBwin').style.display = 'none';\r\n\t}\r\n\t/************************************************************************************\r\n\t*** END DISABLE LIGHTBOX FUNCTIONS **************************************************\r\n\t************************************************************************************/\r\n\r\n\r\n\t/************************************************************************************\r\n\t*** START GENERAL FUNCTIONS *********************************************************\r\n\t************************************************************************************/\r\n\r\n\t// Trim white space from beginning and end of string\r\n\tfunction trim(stringToTrim) {\r\n\t\treturn stringToTrim.replace(/^\\s+|\\s+$/g,\"\");\r\n\t}\r\n\r\n\t// URL Encode a string\r\n\tfunction URLEncode(string) {\r\n\t\t// The Javascript escape and unescape functions do not correspond\r\n\t\t// with what browsers actually do...\r\n\t\tvar SAFECHARS = \"0123456789\" +\t\t\t\t\t// Numeric\r\n\t\t\t\t\t\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZ\" +\t// Alphabetic\r\n\t\t\t\t\t\t\"abcdefghijklmnopqrstuvwxyz\" +\r\n\t\t\t\t\t\t\"-_.!~*()\";\t\t\t\t\t// RFC2396 Mark characters - Removed ' 6/11/2010\r\n\t\tvar HEX = \"0123456789ABCDEF\";\r\n\r\n\t\tvar plaintext = string\r\n\t\tif (plaintext==undefined||plaintext==null){\r\n\t\t\tplaintext = '';\r\n\t\t}\r\n\t\tvar encoded = \"\";\r\n\t\tfor (var i = 0; i < plaintext.length; i++ ) {\r\n\t\t\tvar ch = plaintext.charAt(i);\r\n\t\t\tif (ch == \" \") {\r\n\t\t\t\tencoded += \"+\";\t\t\t\t// x-www-urlencoded, rather than %20\r\n\t\t\t} else if (SAFECHARS.indexOf(ch) != -1) {\r\n\t\t\t\tencoded += ch;\r\n\t\t\t} else {\r\n\t\t\t\tvar charCode = ch.charCodeAt(0);\r\n\t\t\t\t// Unicode Character cannot be encoded using standard URL encoding. (URL encoding only supports 8-bit characters.) A space (+) will be substituted.\"\r\n\t\t\t\tif (charCode > 255) {\r\n\t\t\t\t\tencoded += \"+\";\r\n\t\t\t\t} else {\r\n\t\t\t\t\tencoded += \"%\";\r\n\t\t\t\t\tencoded += HEX.charAt((charCode >> 4) & 0xF);\r\n\t\t\t\t\tencoded += HEX.charAt(charCode & 0xF);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} // for\t\t\r\n\r\n\t\treturn encoded;\r\n\t};\r\n\r\n\t// Is an array?\r\n\tfunction isArray() {\r\n\t\treturn arguments[0] instanceof Array;\r\n\t}\r\n\r\n\t// Is a regular expression?\r\n\tfunction isRegExp() {\r\n\t\treturn arguments[0] instanceof RegExp;\r\n\t}\r\n\t\t\t\t\r\n\t// Is a string?\r\n\tfunction isString() {\r\n\t\tif (typeof arguments[0] == 'string')\r\n\t\t\treturn true;\r\n\t\tif (typeof arguments[0] == 'object') { \r\n\t\t\tvar criterion = arguments[0].constructor.toString().match(/string/i); \r\n\t\t\treturn (criterion != null); \r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\r\n\t// Divide a string in to two parts on a divider\r\n\tfunction divide(string, divider) {\r\n\t\tvar strReplace = genID();\r\n\t\tstring = string.replace(divider,strReplace);\t\r\n\t\treturn Array(string.split(strReplace)[0],string.split(strReplace)[1]);\r\n\t}\r\n\r\n\t// Create an XMLHttpRequest object\r\n\tfunction createRequestObject(){\r\n\t\tvar request_o;\r\n\t\tvar browser = navigator.appName;\r\n\t\tif(browser == \"Microsoft Internet Explorer\"){\r\n\t\t\trequest_o = new ActiveXObject(\"Microsoft.XMLHTTP\");\r\n\t\t}else{\r\n\t\t\trequest_o = new XMLHttpRequest();\r\n\t\t}\r\n\t\treturn request_o;\r\n\t}\r\n\t\r\n\t// Decimal to Hexadecimal\r\n\tfunction dec2hex(dec) {\r\n\t\tvar hD=\"0123456789ABCDEF\";\r\n\t\tvar hex = hD.substr(dec&15,1);\r\n\t\twhile (dec>15) {\r\n\t\t\tdec >>= 4;\r\n\t\t\thhex = hD.substr(dec&15,1) + hex;\r\n\t\t}\r\n\t\treturn hex;\r\n\t}\r\n\r\n\t// Hexadecimal to Decimal\r\n\tfunction hex2ddec(hex) {\r\n\t\treturn parseInt(hex,16);\r\n\t} \r\n\r\n\t// Generate 32 character hex ID\r\n\tfunction genID() {\r\n\t\tvar id = \"\";\r\n\t\tvar i;\r\n\t\tfor (i = 0; i < 32; i++) {\r\n\t\t\tid = id + dec2hex(Math.round(16*Math.random()));\r\n\t\t}\r\n\t\treturn id;\r\n\t}\r\n\r\n\tfunction left(str, n){\r\n\t\tif (n <= 0)\r\n\t\t\treturn \"\";\r\n\t\telse if (n > String(str).length)\r\n\t\t\treturn str;\r\n\t\telse\r\n\t\t\treturn String(str).substring(0,n);\r\n\t}\r\n\r\n\tfunction right(str, n){\r\n\t\tif (n <= 0)\r\n\t\t return \"\";\r\n\t\telse if (n > String(str).length)\r\n\t\t return str;\r\n\t\telse {\r\n\t\t var iLen = String(str).length;\r\n\t\t return String(str).substring(iLen, iLen - n);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction mid(str, start, len){\r\n\t\t// Make sure start and len are within proper bounds\r\n\t\tif (start < 0 || len < 0) return \"\";\r\n\t\tvar iEnd, iLen = String(str).length;\r\n\t\tif (start + len > iLen)\r\n\t\t\t iEnd = iLen;\r\n\t\telse\r\n\t\t\t iEnd = start + len;\r\n\t\treturn String(str).substring(start,iEnd);\r\n\t}\r\n\r\n\tfunction NumbersOnly(myfield, e){\r\n\t\tvar key;\r\n\t\tvar keychar;\r\n\r\n\t\tif (window.event)\r\n\t\t key = window.event.keyCode;\r\n\t\telse if (e)\r\n\t\t key = e.which;\r\n\t\telse\r\n\t\t return true;\r\n\t\tkeychar = String.fromCharCode(key);\r\n\r\n\t\t// control keys\r\n\t\tif ((key==null) || (key==0) || (key==8) || (key==9) || (key==27) )\r\n\t\t return true;\r\n\r\n\t\t// no enters or spaces\r\n\t\telse if ((key==13) || (key==32))\r\n\t\t\treturn false;\r\n\r\n\t\t// only one deicmal\r\n\t\telse if (keychar=='.' && myfield.value.indexOf('.')>-1)\r\n\t\t\treturn false;\r\n\r\n\t\t// numbers\r\n\t\telse if (((\"0123456789\").indexOf(keychar) > -1))\r\n\t\t return true;\r\n\r\n\t\telse\r\n\t\t return false;\r\n\t}\r\n\r\n\tfunction NumbersOnlyWithDecimal(myfield, e){\r\n\t\tvar key;\r\n\t\tvar keychar;\r\n\r\n\t\tif (window.event)\r\n\t\t key = window.event.keyCode;\r\n\t\telse if (e)\r\n\t\t key = e.which;\r\n\t\telse\r\n\t\t return true;\r\n\t\tkeychar = String.fromCharCode(key);\r\n\r\n\t\t// control keys\r\n\t\tif ((key==null) || (key==0) || (key==8) || (key==9) || (key==27) )\r\n\t\t return true;\r\n\r\n\t\t// no enters or spaces\r\n\t\telse if ((key==13) || (key==32))\r\n\t\t\treturn false;\r\n\r\n\t\t// only one deicmal\r\n\t\telse if (keychar=='.' && myfield.value.indexOf('.')>-1)\r\n\t\t\treturn false;\r\n\r\n\t\t// numbers\r\n\t\telse if (((\"0123456789.\").indexOf(keychar) > -1))\r\n\t\t return true;\r\n\r\n\t\telse\r\n\t\t return false;\r\n\t}\r\n\r\n\tfunction getQueryVariable(vQSVar) {\r\n\t\tvar strQuery = window.location.search.substring(1);\r\n\t\tvar aVars = strQuery.split('&');\r\n\t\tfor (var iVar = 0; iVar < aVars.length; iVar++) {\r\n\t\t\tvar aQS = aVars[iVar].split('=');\r\n\t\t\tif (aQS[0]==vQSVar) {\r\n\t\t\t\treturn aQS[1];\r\n\t\t\t}\r\n\t\t} \r\n\t}\r\n\r\n\tfunction isDate(dateStr) {\r\n\r\n\t\tvar datePat = /^(\\d{1,2})(\\/|-)(\\d{1,2})(\\/|-)(\\d{4})$/;\r\n\t\tvar matchArray = dateStr.match(datePat); // is the format ok?\r\n\r\n\t\tif (matchArray == null) {\r\n\t\t\t//alert(\"Please enter date as either mm/dd/yyyy or mm-dd-yyyy.\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tmonth = matchArray[1]; // p@rse date into variables\r\n\t\tday = matchArray[3];\r\n\t\tyear = matchArray[5];\r\n\r\n\t\tif (month < 1 || month > 12) { // check month range\r\n\t\t\t//alert(\"Month must be between 1 and 12.\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (day < 1 || day > 31) {\r\n\t\t\t//alert(\"Day must be between 1 and 31.\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif ((month==4 || month==6 || month==9 || month==11) && day==31) {\r\n\t\t\t//alert(\"Month \"+month+\" doesn`t have 31 days!\")\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (month == 2) { // check for february 29th\r\n\t\t\tvar isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));\r\n\t\t\tif (day > 29 || (day==29 && !isleap)) {\r\n\t\t\t\t//alert(\"February \" + year + \" doesn`t have \" + day + \" days!\");\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn true; // date is valid\r\n\t}\r\n\r\n\tfunction escapeHTML(str){\r\n\t var div = document.createElement('div');\r\n\t var text = document.createTextNode(str);\r\n\t div.appendChild(text);\r\n\t return div.innerHTML;\r\n\t}\r\n\r\n\tfunction fncLongDate(vDate){\r\n\r\n\t\tif(0==Date.parse(vDate)||isNaN(Date.parse(vDate))){\r\n\t\t\treturn '\"' + vDate + '\" is not a valid date.';\r\n\t\t} else {\r\n\t\t\ttry{\r\n\t\t\t\tvar dMyDate = new Date(vDate);\r\n\r\n\t\t\t\tvar sDay = dMyDate.getDay();\r\n\t\t\t\tvar sMonth = dMyDate.getMonth();\r\n\t\t\t\tvar sWeekday = dMyDate.getDate();\r\n\t\t\t\tvar sYear = dMyDate.getYear();\r\n\t\t\t\tvar sHours = dMyDate.getHours();\r\n\t\t\t\tvar sMins = dMyDate.getMinutes();\r\n\t\t\t\tvar sSecs = dMyDate.getSeconds();\r\n\t\t\t\tvar sMornAfter = 'AM';\r\n\r\n\t\t\t\tif (sYear < 2000){\r\n\t\t\t\t\tsYear = sYear + 1900;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (sHours >= 12) {\r\n\t\t\t\t\tif (sHours > 12){\r\n\t\t\t\t\t\tsHours = sHours - 12;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsMornAfter = 'PM';\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (sHours == 0){\r\n\t\t\t\t\t\tsHours = 12;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsMornAfter = 'AM';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (sMins < 10){\r\n\t\t\t\t\tvar sTempMin = sMins;\r\n\t\t\t\t\tsMins = '0' + sTempMin;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (sSecs < 10){\r\n\t\t\t\t\tvar sTempSec = sSecs;\r\n\t\t\t\t\tsSecs = '0' + sTempSec;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar aDays = new Array(\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\");\r\n\t\t\t\tvar aMonths = new Array(\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\");\r\n\r\n\t\t\t\tvar sLongDate = aDays[sDay] + ', ' + aMonths[sMonth] + ' ' + sWeekday + ', ' + sYear + ' ' + sHours + ':' + sMins + ':' + sSecs + ' ' + sMornAfter;\r\n\r\n\t\t\t\treturn sLongDate;\t\t\t\t\r\n\t\t\t}\r\n\t\t\tcatch (err){\r\n\t\t\t\t//alert(err.message);\r\n\t\t\t\treturn 'Error formatting date.';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/************************************************************************************\r\n\t*** END GENERAL FUNCTIONS *********************************************************\r\n\t*************************************************************************************/"]}